package com.example.ywr.service;

import com.example.ywr.common.PageParam;
import com.example.ywr.common.PageResult;
import com.example.ywr.entity.Product;

import java.util.List;

/**
 * 商品服务接口
 */
public interface ProductService {

    /**
     * 添加商品
     *
     * @param product 商品信息
     * @return 添加后的商品信息
     */
    Product add(Product product);

    /**
     * 更新商品
     *
     * @param product 商品信息
     * @return 更新后的商品信息
     */
    Product update(Product product);

    /**
     * 根据ID删除商品
     *
     * @param id 商品ID
     * @return 是否删除成功
     */
    boolean delete(Long id);

    /**
     * 批量删除商品
     *
     * @param ids 商品ID列表
     * @return 是否删除成功
     */
    boolean batchDelete(List<Long> ids);

    /**
     * 根据ID获取商品详情
     *
     * @param id 商品ID
     * @return 商品详情
     */
    Product getById(Long id);

    /**
     * 分页查询商品列表
     *
     * @param pageParam 分页参数
     * @return 商品列表
     */
    PageResult<Product> list(PageParam pageParam);

    /**
     * 根据商品名称模糊查询
     *
     * @param name      商品名称
     * @param pageParam 分页参数
     * @return 商品列表
     */
    PageResult<Product> listByName(String name, PageParam pageParam);

    /**
     * 根据分类ID查询商品
     *
     * @param categoryId 分类ID
     * @param pageParam  分页参数
     * @return 商品列表
     */
    PageResult<Product> listByCategoryId(Long categoryId, PageParam pageParam);

    /**
     * 根据状态查询商品
     *
     * @param status    状态
     * @param pageParam 分页参数
     * @return 商品列表
     */
    PageResult<Product> listByStatus(Integer status, PageParam pageParam);

    /**
     * 根据分类ID和状态查询商品
     *
     * @param categoryId 分类ID
     * @param status     状态
     * @param pageParam  分页参数
     * @return 商品列表
     */
    PageResult<Product> listByCategoryIdAndStatus(Long categoryId, Integer status, PageParam pageParam);

    /**
     * 更新商品状态
     *
     * @param id     商品ID
     * @param status 状态
     * @return 是否更新成功
     */
    boolean updateStatus(Long id, Integer status);

    /**
     * 批量更新商品状态
     *
     * @param ids    商品ID列表
     * @param status 状态
     * @return 是否更新成功
     */
    boolean batchUpdateStatus(List<Long> ids, Integer status);
}